

package com.mt.repair.controller.repairManagement;

import com.mt.repair.service.repairManagement.RepairOrderService;
import org.springframework.security.access.prepost.PreAuthorize;
import com.mt.common.core.annotation.ApiPageParam;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.mt.common.core.web.base.PageDTO;
import com.mt.common.core.web.base.PageResultDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


import com.mt.repair.dto.repairManagement.RepairEvaluateEditDto;
import com.mt.repair.entity.repairManagement.RepairEvaluate;
import com.mt.repair.service.repairManagement.RepairEvaluateService;
import com.mt.common.system.service.UserService;


@Api(tags = "维修评价")
@RestController
@RequestMapping("/api/repair/repairManagement/RepairEvaluate")
@CrossOrigin(allowCredentials = "true")
public class RepairEvaluateController {
    private static Logger logger = LoggerFactory.getLogger(RepairEvaluateController.class);

    @Autowired
    private RepairEvaluateService repairEvaluateService;
    @Autowired
    private RepairOrderService repairOrderService;
    @Autowired
    private UserService userService;

    /**
     * 根据分页参数查询维修评价集合
     *
     * @param pageDTO 分页条件
     */
    @PreAuthorize("hasAuthority('repair:repairManagement:RepairEvaluate:view')")
    @ApiOperation("分页查询维修评价")
    @ApiPageParam
    @PostMapping("/findRepairEvaluates")
    public PageResultDTO findRepairEvaluates(@RequestBody PageDTO pageDTO) {
        return this.repairEvaluateService.findRepairEvaluates(pageDTO);
    }

    /**
     * 根据ID查询指定的维修评价
     *
     * @param repairEvaluateId Id
     */
    @PreAuthorize("hasAuthority('repair:repairManagement:RepairEvaluate:view')")
    @ApiOperation("根据id查询维修评价")
    @ApiPageParam
    @PostMapping("/findRepairEvaluate")
    public RepairEvaluate findRepairEvaluate(@RequestParam Long repairEvaluateId) {
        return this.repairEvaluateService.findRepairEvaluate(repairEvaluateId);
    }

    /**
     * 根据ID查询指定的维修评价(包含外键名称)
     *
     * @param repairEvaluateId Id
     */
    @PreAuthorize("hasAuthority('repair:repairManagement:RepairEvaluate:view')")
    @ApiOperation("根据ID查询指定的维修评价(包含外键名称)")
    @PostMapping("/findRepairEvaluateForView")
    public RepairEvaluate findRepairEvaluateForView(@RequestParam Long repairEvaluateId) {
        return this.repairEvaluateService.findRepairEvaluateWithForeignName(repairEvaluateId);
    }

    /**
     * 根据ID查询指定的维修评价(包含维修评价和外键名称)
     *
     * @param repairEvaluateId Id
     */
    @PreAuthorize("hasAuthority('repair:repairManagement:RepairEvaluate:view')")
    @ApiOperation("根据ID查询指定的维修评价(包含维修评价和外键名称)")
    @PostMapping("/findRepairEvaluateForEdit")
    public RepairEvaluateEditDto findRepairEvaluateForEdit(@RequestParam Long repairEvaluateId) {
        RepairEvaluateEditDto repairEvaluateEditDto = new RepairEvaluateEditDto();
        repairEvaluateEditDto.setRepairEvaluate(this.repairEvaluateService.findRepairEvaluateWithForeignName(repairEvaluateId));

        this.prepareRepairEvaluateEditDto(repairEvaluateEditDto);

        return repairEvaluateEditDto;
    }

    /**
     * 根据ID查询指定的维修评价(只提取ID 和 Name)
     *
     * @param repairEvaluateId Id
     */
    @PreAuthorize("hasAuthority('repair:repairManagement:RepairEvaluate:view')")
    @ApiOperation("根据ID查询指定的维修评价(只提取ID 和 Name)")
    @PostMapping("/findRepairEvaluatesWithIdNameById")
    public RepairEvaluate findRepairEvaluatesWithIdNameById(@RequestParam Long repairEvaluateId) {
        return this.repairEvaluateService.findRepairEvaluatesWithIdNameById(repairEvaluateId);
    }

    /**
     * 根据名称查询维修评价集合(只提取ID 和 Name)
     *
     * @param repairEvaluateName 名称
     */
    @PreAuthorize("hasAuthority('repair:repairManagement:RepairEvaluate:view')")
    @ApiOperation("根据名称查询维修评价集合(只提取ID 和 Name)")
    @PostMapping("/findRepairEvaluatesWithIdNameByName")
    public List<RepairEvaluate> findRepairEvaluatesWithIdNameByName(@RequestParam String repairEvaluateName) {
        return this.repairEvaluateService.findRepairEvaluatesWithIdNameByName(repairEvaluateName);
    }


    /**
     * 创建新的维修评价
     */
    @PreAuthorize("hasAuthority('repair:repairManagement:RepairEvaluate:add')")
    @ApiOperation("创建新的维修评价")
    @PostMapping("/createRepairEvaluate")
    public RepairEvaluateEditDto createRepairEvaluate() {
        RepairEvaluateEditDto repairEvaluateEditDto = new RepairEvaluateEditDto();
        repairEvaluateEditDto.setRepairEvaluate(new RepairEvaluate());

        this.prepareRepairEvaluateEditDto(repairEvaluateEditDto);
        return repairEvaluateEditDto;
    }

    private void prepareRepairEvaluateEditDto(RepairEvaluateEditDto repairEvaluateEditDto) {
        //TODO: 以下代码可以注释掉，此行代码即时加载所有外键对象，以便选择。如果不在此加载，可以在界面上实现延迟加载。如果外键对象超过 500 行，建议采用延迟加载
        repairEvaluateEditDto.setRepairOrderRepairOrders(this.repairOrderService.findAllRepairOrdersWithIdName());
        //TODO: 以下代码可以注释掉，此行代码即时加载所有外键对象，以便选择。如果不在此加载，可以在界面上实现延迟加载。如果外键对象超过 500 行，建议采用延迟加载
        repairEvaluateEditDto.setUserUsers(this.userService.findAllUsersWithIdName());
        //TODO: 以下代码可以注释掉，此行代码即时加载所有外键对象，以便选择。如果不在此加载，可以在界面上实现延迟加载。如果外键对象超过 500 行，建议采用延迟加载
        repairEvaluateEditDto.setRepairUserUsers(this.userService.findAllUsersWithIdName());
        //TODO: 以下代码可以注释掉，此行代码即时加载所有外键对象，以便选择。如果不在此加载，可以在界面上实现延迟加载。如果外键对象超过 500 行，建议采用延迟加载
        repairEvaluateEditDto.setRepairApplicantUsers(this.userService.findAllUsersWithIdName());
    }

    /**
     * 新增保存维修评价
     *
     * @param repairEvaluate 实体对象
     */
    @PreAuthorize("hasAuthority('repair:repairManagement:RepairEvaluate:add')")
    @ApiOperation("新增保存维修评价")
    @PostMapping("/saveRepairEvaluate")
    public RepairEvaluate saveRepairEvaluate(@RequestBody RepairEvaluate repairEvaluate) {
        return this.repairEvaluateService.saveRepairEvaluate(repairEvaluate);
    }

    /**
     * 修改保存维修评价
     *
     * @param repairEvaluate 实体对象
     */
    @PreAuthorize("hasAuthority('repair:repairManagement:RepairEvaluate:update')")
    @ApiOperation("修改保存维修评价")
    @PostMapping("/updateRepairEvaluate")
    public RepairEvaluate updateRepairEvaluate(@RequestBody RepairEvaluate repairEvaluate) {
        return this.repairEvaluateService.updateRepairEvaluate(repairEvaluate);
    }

    /**
     * 根据ID删除维修评价
     *
     * @param repairEvaluateId ID
     */
    @PreAuthorize("hasAuthority('repair:repairManagement:RepairEvaluate:remove')")
    @ApiOperation("根据ID删除维修评价")
    @PostMapping("/deleteRepairEvaluate")
    public void deleteRepairEvaluate(@RequestParam Long repairEvaluateId) {
        this.repairEvaluateService.deleteRepairEvaluate(repairEvaluateId);
    }


}

